import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import { ElMessage } from 'element-plus'

// 创建 axios 实例
const api: AxiosInstance = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
    timeout: 15000,
    headers: {
        'Content-Type': 'application/json'
    }
})

// 请求拦截器
api.interceptors.request.use(
    (config: AxiosRequestConfig) => {
        // 从 localStorage 获取 token
        const token = localStorage.getItem('token')
        if (token && config.headers) {
            config.headers.Authorization = `Bearer ${token}`
        }
        return config
    },
    (error) => {
        console.error('Request error:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
api.interceptors.response.use(
    (response: AxiosResponse) => {
        return response.data
    },
    (error) => {
        let message = '请求失败'

        if (error.response) {
            switch (error.response.status) {
                case 400:
                    message = error.response.data.message || '请求参数错误'
                    break
                case 401:
                    message = '未授权，请登录'
                    // TODO: 跳转到登录页面
                    break
                case 403:
                    message = '拒绝访问'
                    break
                case 404:
                    message = '请求地址不存在'
                    break
                case 500:
                    message = '服务器内部错误'
                    break
                default:
                    message = error.response.data.message || '请求失败'
            }
        } else if (error.request) {
            message = '网络错误，请检查网络连接'
        }

        ElMessage.error(message)
        return Promise.reject(error)
    }
)

// 模板相关的 API 请求
export const templateApi = {
    // 获取模板列表
    getTemplates: async (params: {
        page: number
        pageSize: number
        category?: string
        search?: string
        sort?: string
    }) => {
        return api.get('/templates', { params })
    },

    // 获取单个模板详情
    getTemplate: async (id: string) => {
        return api.get(`/templates/${id}`)
    },

    // 创建模板
    createTemplate: async (data: Omit<Template, '_id' | 'createdAt' | 'updatedAt'>) => {
        return api.post('/templates', data)
    },

    // 更新模板
    updateTemplate: async (id: string, data: Partial<Template>) => {
        return api.put(`/templates/${id}`, data)
    },

    // 删除模板
    deleteTemplate: async (id: string) => {
        return api.delete(`/templates/${id}`)
    },

    // 点赞模板
    likeTemplate: async (id: string) => {
        return api.post(`/templates/${id}/like`)
    },

    // 上传模板封面图片
    uploadCover: async (file: File) => {
        const formData = new FormData()
        formData.append('file', file)
        return api.post('/templates/upload', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        })
    }
}

export default api